[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ๋๋ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#342
Conversation
her0807
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ๋๋! ใ ใ
๋ชฝ๊ณ ๋๋น๋ฅผ ์ฐ๊ฒฐํด๋ณด์ จ๊ตฐ์?
์ ์ด์ฃผ์ ๋ด์ฉ์ผ๋ก ๋ฏธ๋ฃจ์ด๋ณด์์ ๋ ์ ๊ณต์ ์ด์ ๊ฒ ๊ฐ์๋ฐ ๋ง์๊น์?
ํน์ ๋ค๋ฅธ ๋๋น๋ค์ ์ฌ์ฉํด๋ณด์๊ณ ๋ชฝ๊ณ ๋๋น๋ฅผ ์ฐ๊ฒฐํด๋ณด์ ๊ฒ์ธ์ง, ๋น์ ํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋๋น๋ ๋ชฝ๊ณ ๋๋น ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋๋น๋ค๋ ์๋๋ฐ ์ด๋ค์ด์ ๋ก ์ ํํ๋์ง ์กฐ๊ธ ๋ ์์ธํ ๋ฃ๊ณ ์ถ์ด์!
| @@ -38,6 +43,40 @@ private boolean isNotCorrectPath(final Position from, final Position to) { | |||
| return true; | |||
| } | |||
|
|
|||
| if (hanSoldierCanDiagonalMoveInPalace(from, to) || chuSoldierCanDiagonalMoveInPalace(from, to)) { | |||
| return true; | |||
| } | |||
|
|
|||
| return false; | |||
| } | |||
There was a problem hiding this comment.
๋๊ฐ์ ์ด๋์ ์ฐจ๋จํ๋ ์์น ๋ชฉ๋ก (0,4), (9,4) ๊ฐ ๋๋ฝ๋ ๊ฒ ๊ฐ์์! ๐
๊ถ์ฑ ๋๊ฐ์ ์ ์ค์(1,4)/(8,4)๊ณผ ๊ผญ์ง์ ๋ง ์ฐ๊ฒฐํ๋ ๊ฑด๋ฐ์, (0,4)๋ ๊ถ์ฑ ์๋จ ๋ณ์ ์ค๊ฐ์ด๋ผ ๋๊ฐ์ ๋ผ์ธ ์์ ์๊ฑฐ๋ ์. ํ์ฌ ์ฝ๋์์ ๊ถ(General)์ด (0,4)โ(1,5)๋ก ๋๊ฐ์ ์ด๋์ด ๊ฐ๋ฅํ ์ํ์
๋๋ค!
There was a problem hiding this comment.
๋๋ฝ๋ ๋ถ๋ถ ์ถ๊ฐํ๊ณ ํ
์คํธ๊น์ง ์ถ๊ฐํ์ต๋๋ค!
๋ณด์๋ค์ํผ ์ด๋ ๊ฒ ๋ง์ ์กฐ๊ฑด๋ค์ด || ์ฐ์ฐ์ผ๋ก ์ด์ด์ง๋ฉด ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๋ฏธ์ค๊ฐ ๋ ํ๋ฅ ์ด ๋์์ง๋ ๊ฒ ๊ฐ์๋ฐ, ๊ฐ์ฒด ์งํฅ์ ์ค๊ณ๊ฐ ์๋ชป๋ ์ ํธ๋ก ๋ณผ ์ ์์๊น์?
There was a problem hiding this comment.
์กฐ๊ฑด ์ฐ์ฐ์ด ๋ง์์ง๋๊ฒ ์ค๊ณ๊ฐ ์๋ชป๋ ์ ํธ์ผ ์๋ ์๊ณ , ํน์ ๋๋ฉ์ธ์ด ๋ณต์กํด์ ๋ฐ์ํ๋ ๋ฌธ์ ์ผ ์๋ ์๋ค๊ณ ์๊ฐํด์. ใ
ใ
ํด๋น ๋ถ๋ถ์ ๋จ์ํ
์คํธ๋ก ๋ฏธ์ค๋ ํ๋ฅ ์ ๋ณด์ํ๊ฑฐ๋ ์กฐ๊ฑด๋ค์ ๋จ์์ ๋ง์ถฐ์ ์กฐ๊ฑด์ ๊ฐ์ง๊ณ ์๋ ๋๋ฉ์ธ์ ๋ฉ์ธ์ง๋ฅผ ๋ ๋ฆฌ๋ ๋ฐฉํฅ์ผ๋ก ๋ฆฌํฉํฐ๋งํด๋ด๋ ์ข์๋ฏ ํด์
|
|
||
| collection.replaceOne( | ||
| Filters.eq("_id", new ObjectId(gameId)), | ||
| updateDoc | ||
| ); | ||
| } |
There was a problem hiding this comment.
๋๋๊ฐ ์ ๋ฆฌํ MongoDB ์ฅ์ ์ค ์คํค๋ง ์ ์ฐ์ฑ: pieces ๋ฐฐ์ด๋ก ํ๋์ Document์ ๋ด์ ์ ์์ด JOIN์ด ๋ถํ์๋ผ๋ ๋ถ๋ถ์ด ์์๋๋ฐ์, ํ ๊ฐ์ง ๋ ๊น์ด ์๊ฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์.
ํ์ฌ ๊ตฌ์กฐ์์๋ ๋งค ํด๋ง๋ค ์ ์ฒด ๊ธฐ๋ฌผ ๋ฐฐ์ด์ ํต์งธ๋ก ๊ต์ฒดํ๊ณ ์์ด์.
RDBMS์๋ค๋ฉด ์ด๋ํ ๊ธฐ๋ฌผ 1~2๊ฐ๋ง UPDATEํ๋ฉด ๋๋๋ฐ, MongoDB Document ๊ตฌ์กฐ์์๋ ๊ธฐ๋ฌผ 32๊ฐ๋ฅผ ๋งค๋ฒ ์ ๋ถ ์ง๋ ฌํํด์ ์ ์ฅํ๊ณ ์๊ฑฐ๋ ์. ์ด trade-off๋ฅผ ์ธ์งํ๊ณ ์์๋์? ํ์ฌ ๊ท๋ชจ์์๋ ๋ฌธ์ ์์ง๋ง, Document๋ก ํ ๋ฒ์ ๋ด๋ ๊ฒ ํญ์ ์ข์ ๊ฑด์ง ์๊ฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์!
There was a problem hiding this comment.
PR ์ค๋ช ์์ ์ด๋ ๊ฒ ์ ์ด์ฃผ์ จ๋๋ฐ์!
ํธ๋์ญ์ ๋ฏธ์ง์(๋จ์ผ ๋ ธ๋): ํ์ฌ ๊ตฌ์กฐ์์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ๊ฒ์ ์ํ ์ ์ฅ์ด ์ฌ๋ฌ ์ปฌ๋ ์ ์ ๊ฑธ์น๊ฒ ๋๋ค๋ฉด ํธ๋์ญ์ ๊ด๋ฆฌ๊ฐ RDBMS๋ณด๋ค ๊น๋ค๋ก์ธ ์ ์๋ค๋ ์ ์ ์ธ์งํ์ต๋๋ค
์ด ๋ถ๋ถ์ ์ฌ์ค ์ ํํ์ง ์์์! MongoDB๋ 4.0(2018๋
)๋ถํฐ ๋ฉํฐ ๋ํ๋จผํธ ํธ๋์ญ์
์ ์ง์ํฉ๋๋ค. ๋๋๊ฐ ์ฌ์ฉ ์ค์ธ ๋๋ผ์ด๋ฒ(mongodb-driver-sync:5.3.1)๋ ๋น์ฐํ ์ง์ํ๊ณ ์.
// MongoDB์์๋ ํธ๋์ญ์
์ด ๊ฐ๋ฅํด์
try (ClientSession session = client.startSession()) {
session.startTransaction();
collection1.insertOne(session, doc1);
collection2.insertOne(session, doc2);
session.commitTransaction();
}๋ค๋ง ๋๋์ ํ์ฌ ๊ตฌ์กฐ์์๋ ๊ฒ์ ์ํ๊ฐ ๋จ์ผ Document ํ๋์ ์ ๋ถ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์
์ด ํ์ ์๋ ๊ตฌ์กฐ์ด๊ธด ํด์. MongoDB๋ ๋จ์ผ Document์ ๋ํ ์์์ ์ฐ๊ธฐ๋ฅผ ๊ธฐ๋ณธ ๋ณด์ฅํ๊ฑฐ๋ ์. ๊ทธ๋์ replaceOne()์ด ์ค๊ฐ์ ์คํจํด๋ ๋ฐ์ฏค ์ ์ฅ๋๋ ์ผ์ ์์ด์.
์ ๋ฆฌํ๋ฉด, ํธ๋์ญ์ ์ด ์ ๋ผ์ ๊น๋ค๋กญ๋ค๊ฐ ์๋๋ผ ๋จ์ผ Document ๊ตฌ์กฐ๋ผ์ ํธ๋์ญ์ ์ด ์ ์ด์ ํ์ ์๋ค๊ฐ ๋ ์ ํํ ํํ์ด์์!
There was a problem hiding this comment.
์ฅ๊ธฐ ๋๋ฉ์ธ์ MongoDB๊ฐ ์ ๋ง ์ ํฉํ ์ ํ์ผ๊น? ๐ค
๋๋๊ฐ MongoDB๋ฅผ ์ ํํ ๋์ ์ ์ ์ ์ ๋ง ์ข์์ด์! ๋ค๋ง ์์งํ๊ฒ ์ด์ผ๊ธฐํ๋ฉด, ์ฅ๊ธฐ๋ RDBMS๊ฐ ๋ ์์ฐ์ค๋ฌ์ด ๋๋ฉ์ธ์ด๋ผ๊ณ ์๊ฐํด์. ์ด์ ๋ฅผ ๋ช ๊ฐ์ง ์ ๋ฆฌํด๋ณผ๊ฒ์.
์ฅ๊ธฐ๊ฐ RDBMS์ ๋ ๋ง๋ ์ด์
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋งค์ฐ ๊ณ ์ ์ ์ด์์. 9x10 ๋ณด๋, ๊ณ ์ ๋ ๊ธฐ๋ฌผ ํ์ , ๊ณ ์ ๋ ํ โ ์คํค๋ง๊ฐ ๋ณํ ์ผ์ด ์์ด์, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ชฝ๊ณ ๋๋น์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ด์ ์ ๋ชป๋๋ฆฌ๋ ์ํฉ์ด์์.
- ๊ธฐ๋ฌผ ์ด๋์ 1~2๊ฐ ํ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋๋ฐ, Document ๊ตฌ์กฐ๋ ๋งค๋ฒ 32๊ฐ ๊ธฐ๋ฌผ์ ์ ๋ถ ์ง๋ ฌํํด์ผ ํด์
- "์งํ ์ค์ธ ๊ฒ์ ๋ชฉ๋ก", "ํน์ ํ๋ ์ด์ด์ ์ ์ " ๊ฐ์ ์ฟผ๋ฆฌ๋ RDBMS๊ฐ ํจ์ฌ ์์ฐ์ค๋ฌ์์
- ์คํค๋ง ๊ฐ์ ๊ฐ ์คํ๋ ค ์๋ชป๋ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ฐฉ์งํด์ค์ ์๋ฅผ๋ค๋ฉด piece_type์ ์คํ๊ฐ ๋ค์ด๊ฐ๋ฉด ์ ์ฝ ์กฐ๊ฑด์์ ์กํ๋๊น์. ์ง๊ธ์ ์๋ชป ์ ์ฅ๋๋ฉด ๋์ค์ enum ์ด๋ ๋ค๋ฅธ๊ฑธ๋ก ์กฐํํ ๋ ์บ์คํ ํ๋ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋๊ฒ ์ฃ ?
MongoDB๊ฐ ๋น๋๋ ๋๋ฉ์ธ์
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ๋์ ์ธ ๊ฒฝ์ฐ (์: ์ฌ์ฉ์๋ณ ์ค์ , ๋ก๊ทธ, CMS ์ฝํ ์ธ )
- ๋น์ ํ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ
- ์ํ ํ์ฅ์ด ํ์ํ ๋๊ท๋ชจ ํธ๋ํฝ
๋ฌผ๋ก ํ์ฌ ๋ฏธ์ ๋ฒ์์์๋ ๋ ๋ค ์ถฉ๋ถํ ๋์ํ๊ณ , MongoDB๋ฅผ ์ง์ ์จ๋ณธ ๊ฒฝํ ์์ฒด๊ฐ ๊ทํ๋ค๊ณ ์๊ฐํด์. ํ์ต๋ชฉ์ ์ผ๋ก ์ ํํ๊ฒ๋ ์ด์ ๊ฐ ๋๋๊น์!
There was a problem hiding this comment.
MongoDB ์ ๋ํด ์ฐพ์๋ณด๋ RDB ์ฒ๋ผ ํน์ ํ๋๋ง ์์ ํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ด ์กด์ฌํ์ต๋๋ค.
//ํต์ฌ ์ฐจ์ด๋ replaceOne์ _id๋ฅผ ์ ์ธํ ๋ฌธ์ ์ ์ฒด๋ฅผ ์ ๋ฌธ์๋ก ๋ฎ์ด์ฐ์ง๋ง,
// updateOne + $set์ ์ง์ ํ ํ๋๋ง ๋ณ๊ฒฝํ๊ณ ๋๋จธ์ง ํ๋๋ ๊ทธ๋๋ก ์ ์งํ๋ค๋ ์ ์
๋๋ค.
public void update(String gameId, List<PieceDto> pieces, int turnCount) {
ArrayList<Document> pieceDocuments = new ArrayList<>();
for (PieceDto pieceDto : pieces) {
pieceDocuments.add(toDocument(pieceDto));
}
Document updateFields = new Document("$set", new Document()
.append("pieces", pieceDocuments)
.append("turnCount", turnCount));
collection.updateOne(
Filters.eq("_id", new ObjectId(gameId)),
updateFields
);
}์ด๋ ๊ฒ ํ๋ฉด ์ ์ฒด ๋ฌธ์๋ฅผ ๋ฎ์ด์ฐ๋๊ฒ ์๋๋ผ ํน์ ํ๋๋ง ๋ฐ๊พธ๊ฒ ๋ฉ๋๋ค.
์ฐ์ , NoSQL์ ๊ดํ ์ ์๊ฐ์ ๋ง์๋๋ฆฌ๊ณ ์ถ์ด์.
NoSQL์ ๋จ์ํ "๋น์ ํ ๋ฐ์ดํฐ์ฉ"์ด๋ผ๋ ํ๋ ์์ ๊ฐ๋๊ธฐ์ ๊ทธ ์ฒ ํ์ด ๋ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๊ธ์์ "Document ๊ตฌ์กฐ๋ ๋งค๋ฒ 32๊ฐ ๊ธฐ๋ฌผ์ ์ ๋ถ ์ง๋ ฌํํด์ผ ํ๋ค"๊ณ ํ์
จ๋๋ฐ, ์ด๋ MongoDB๋ฅผ replaceOne์ผ๋ก๋ง ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ ๊ฒ์
๋๋ค.(์ ์ ์๋ชป๋ ๊ตฌํใ
ใ
) ์ ์ฝ๋์ฒ๋ผ updateOne + $set ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ํ๋๋ง ๋ณ๊ฒฝํ๊ณ ๋๋จธ์ง๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค! ํต์ฌ ์ฐจ์ด๋ replaceOne์ _id๋ฅผ ์ ์ธํ ๋ฌธ์ ์ ์ฒด๋ฅผ ๋ฎ์ด์ฐ์ง๋ง, updateOne + $set์ ์ง์ ํ ํ๋๋ง ๊ฐฑ์ ํ๋ค๋ ์ ์
๋๋ค. ์ด ๋ถ๋ถ์ ์ ๊ฐ ์๋ชป ๊ตฌํํด์ ์คํด๋ฅผ ๋๋ฆฐ ๊ฒ ๊ฐ์ต๋๋ค. "๋งค๋ฒ ์ ๋ถ ์ง๋ ฌํํด์ผ ํ๋ค"๋ MongoDB์ ๋ณธ์ง์ ํ๊ณ๊ฐ ์๋๋ผ ์ฌ์ฉ ๋ฐฉ์์ ๋ฌธ์ ์์ต๋๋ค.
์ต๊ทผ ๊ฐ๋ฐ์๋ฅผ ์ํ Redis๋ผ๋ ์ฑ ์ ์ฝ์์ต๋๋ค. ๊ทธ ๊ณณ์์ NoSQL์ ๊ธฐ์กด RDB์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ฝ์ ์ ์ด ์์ต๋๋ค. ์ ๋ํ RDB๊ฐ ACID๋ฅผ ์ง์ผ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์๊ฒฉํ ์งํจ๋ค๋ ์ ์์ ์ฅ์ ์ด ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง NoSQL์ ๊ทธ ์๊ฒฉํจ์ ์๋์ ์ผ๋ก ์ํํ๋ ๋์ , ์ ์ฐ์ฑ๊ณผ ๊ฐ๋ฐ ์์ฐ์ฑ์ด๋ผ๋ ๋ค๋ฅธ ๊ฐ์น๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฅ๊ธฐ ๋๋ฉ์ธ์ฒ๋ผ ์คํค๋ง๊ฐ ๊ณ ์ ์ ์ด๋ผ ํด๋, ๊ทธ ๊ณ ์ ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฌธ์๋ก ์์ง๋ ฅ ์๊ฒ ํํํ ์ ์๋ค๋ ๊ฒ ์์ฒด๊ฐ MongoDB์ ์ฅ์ ์ ๋๋ค.
"๊ณ ์ ๋ ์คํค๋ง = RDBMS"๋ผ๋ ๋ฑ์์ ๋ํด์๋ ์๊ฐํด๋ณผ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ฅ๊ธฐ ๊ฒ์ ํ๋๋ฅผ RDBMS๋ก ๋ชจ๋ธ๋งํ๋ฉด games ํ
์ด๋ธ, pieces ํ
์ด๋ธ, moves ํ
์ด๋ธ ๋ฑ ์ฌ๋ฌ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ๋๊ณ , ๊ฒ์ ์ํ๋ฅผ ์กฐํํ ๋๋ง๋ค JOIN์ด ํ์ํฉ๋๋ค. ๋ฐ๋ฉด MongoDB๋ ํ๋์ Document ์์ ๊ฒ์์ ์ ์ฒด ์ํ๋ฅผ ๋ด์ ์ ์์ต๋๋ค. ์ด๋ "๊ฒ์ ํ๋๋ฅผ ๋ถ๋ฌ์จ๋ค"๋ ๊ฐ์ฅ ๋น๋ฒํ ์ฐ์ฐ์์ ์คํ๋ ค ๋ ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ธ ๊ตฌ์กฐ์
๋๋ค. ๋ฐ์ดํฐ๊ฐ ๊ณ ์ ์ ์ด๋ผ๋ ๊ฒ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๋จ์๋ก ๋ฌถ์ด์ ๋ค๋ฃจ๋๋๋ ๋ณ๊ฐ์ ๋ฌธ์ ์
๋๋ค.
์คํค๋ง ๊ฒ์ฆ์ ๋ํด์๋ MongoDB๋ ๋์์ด ์์ต๋๋ค.
MongoDB๋ Schema Validation ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. piece_type์ ์คํ๊ฐ ๋ค์ด๊ฐ๋ ๋ฌธ์ ๋ RDBMS์ ์ ์ฝ ์กฐ๊ฑด๋ง์ผ๋ก ๋ฐฉ์งํ ์ ์๋ ๊ฒ์ด ์๋๋ผ, MongoDB์ JSON Schema Validation์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ์ enum ๊ฒ์ฆ์ผ๋ก๋ ์ถฉ๋ถํ ๋์ ๊ฐ๋ฅํฉ๋๋ค. ์ค์ ๋ก ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ์์ ๊ฒ์ฆํ๋ ๊ฒ์ด DB ์ข
๋ฅ์ ๋ฌด๊ดํ๊ฒ ๋ ๊ฒฌ๊ณ ํ ๋ฐฉ์ด์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ชฝ๊ณ ๋๋น ์คํค๋ง ๊ฒ์ฆ ๋ฃ๊ธฐ
https://velog.io/@lemix777/MongoDB-%EC%8A%A4%ED%82%A4%EB%A7%88-%EC%9C%A0%ED%9A%A8%EC%84%B1-%EA%B2%80%EC%82%AC
There was a problem hiding this comment.
๋๋๊ฐ ์ด๋ ๊ฒ ๊น์ด ๊ณ ๋ฏผํ๊ณ ๋ต๋ณํด์ฃผ์ ์ ๋๋ฌด ์ข์์! ์ฑ ๊น์ง ์ฝ์ด๋ณด์ จ๋ค๋ ์ ๋ง ๋ฉ์ ธ์. ๋ค๋ง ๋ช ๊ฐ์ง ์ง์ด๋ณด๊ณ ์ถ์ ๋ถ๋ถ์ด ์์ด์ ๋ค์ ์๊ฒฌ ๋จ๊ฒจ์.
MongoDB๋ ๋ถ๋ถ ์ ๋ฐ์ดํธ๊ฐ ๋๋ค๋ ๋ต๋ณ์ ๋ํด
updateOne + $set์ ์๋ ค์ฃผ์
์ ๊ฐ์ฌํด์! ์ ๊ฐ replaceOne ๊ธฐ์ค์ผ๋ก๋ง ์ด์ผ๊ธฐํ ๊ฑด ๋ง์์. ๋ค๋ง ์ด ๋ต๋ณ์ ์ฝ์ผ๋ฉด์ ํ ๊ฐ์ง ์๊ฐ์ด ๋ค์์ด์.
MongoDB๋ RDBMS์ฒ๋ผ ํน์ ํ๋๋ง ์์ ํ ์ ์์ด์
MongoDB๋ RDBMS์ฒ๋ผ ์คํค๋ง ๊ฒ์ฆ์ ํ ์ ์์ด์
์ด ๋ต๋ณ๋ค์ ๊ณตํต์ ์ MongoDB๋ RDBMS์ฒ๋ผ ~ํ ์ ์๋ค์์. ๊ทธ๋ฐ๋ฐ RDBMS์ฒ๋ผ ์ธ ๊ฑฐ๋ฉด RDBMS๋ฅผ ์ฐ๋ฉด ๋์ง ์์๊น์?
๋๊ตฌ๋ฅผ ์ ํํ ๋ ์ด ๋๊ตฌ๋ก๋ X๋ฅผ ํ ์ ์๋ค๊ฐ ๊ทผ๊ฑฐ๊ฐ ๋๋ฉด ์ข ์ํํด์. ๊ทธ๋ผ ๋ชจ๋ ๋๊ตฌ๊ฐ ๋ค ๊ฐ์์ง๊ฑฐ๋ ์. ์ง์ง ์๊ฐํด๋ณผ ์ง์ ์ ์ด ๋๋ฉ์ธ์์ MongoDB๊ฐ RDBMS๋ณด๋ค ๋ ์ํ๋ ๊ฒ ๋ญ๊ฐ?์์.
MongoDB์ ์ง์ง ๊ฐ์ ์ ์ด๋์ ๋น๋๋์?
MongoDB๊ฐ ์ ๋ง ๋น๋๋ ์๋๋ฆฌ์ค๋ ์ด์ ์ ๋งํ๋ฏ ์๋์ ๊ฐ์์.
- ์คํค๋ง๊ฐ ์์ฃผ ๋ณํ๋ ๊ฒฝ์ฐ (CMS, ์ฌ์ฉ์ ํ๋กํ, ๋ก๊ทธ)
- ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ๋ถ๋ฆฌํ๊ณ eventual consistency๋ฅผ ๋ฐ์๋ค์ด๋ ๊ฒฝ์ฐ (์์ ํผ๋, ์๋ฆผ)
- ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํํํ๋ ๊ฒฝ์ฐ (ํธ๋ฆฌ, ์ค์ฒฉ ๋๊ธ)
์ฅ๊ธฐ ๊ฒ์์ ์ด ์ค ์ด๋์๋ ํด๋นํ์ง ์์์. ๋๋๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ณ ์ ์ ์ด๋ผ๋ ๊ฒ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๋จ์๋ก ๋ฌถ๋๋๋ ๋ณ๊ฐ๋ผ๊ณ ํ์ จ๋๋ฐ, ๊ทธ ๋ง์ ๋ง์์. ๋ค๋ง ํ๋์ ๋จ์๋ก ๋ฌถ๊ณ ์ถ๋ค๊ฐ MongoDB๋ฅผ ์ ํํ๋ ๊ฒฐ์ ์ ์ด์ ๊ฐ ๋ ์ ์๋๊ฐ?๋ ๋ค๋ฅธ ๋ฌธ์ ์์.
ํ๋์ Document๋ก ์์ง์ด ์ง์ง MongoDB๋ง์ ๊ฐ์ ์ธ๊ฐ์?
PostgreSQL์ JSONB, MySQL์ JSON ์ปฌ๋ผ์ ๋ณด๋ฉด, ์ฌ์ค ํ๋ RDBMS๋ ํ๋์ row์ ๋ณต์กํ JSON ๊ตฌ์กฐ๋ฅผ ๋ด์ ์ ์์ด์. PostgreSQL JSONB๋ ์ธ๋ฑ์ฑ๋ ๋๊ณ ๋ถ๋ถ ์ ๋ฐ์ดํธ๋ ๋ผ์.
MySql ์์ ํ๋ ์์ฒด๋ฅผ json ์ผ๋ก ์ ์ฅํด์ ๊บผ๋ด ์ธ ์๋ ์์ด์.
-- PostgreSQL์์ ๊ฒ์ ํ๋๋ฅผ ํ row์ ๋ด๋ ๊ฒ๋ ๊ฐ๋ฅ
CREATE TABLE games (
id BIGSERIAL PRIMARY KEY,
pieces JSONB NOT NULL,
turn_count INT NOT NULL
);
UPDATE games SET pieces = jsonb_set(pieces, '{0}', '...') WHERE id = 1;๊ทธ๋์ Document๋ก ๋ฌถ์ ์ ์๋ค๋ MongoDB์ ๊ณ ์ ํ ๊ฐ์ ์ด๋ผ๊ธฐ๋ณด๋ค๋, ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณตํต ๊ธฐ๋ฅ์ ๊ฐ๊น์์.
Schema Validation ์ถ๊ฐ๋ MongoDB์ ์๋ณด๋ผ๊ณ ์๊ฐํด์.
์ด๊ฑด ์ข ๋๋ฐ์ ์ธ ํํ์ด๊ธด ํ๋ฐ์, MongoDB๊ฐ Schema Validation์ ๋์ ํ ๊ฑด ์คํค๋ง ์๋ ์์ ๋ก์์ด ์ค๋ฌด์์ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ ์ค์ผ์ ์ผ์ผ์ผฐ๊ธฐ ๋๋ฌธ์ด์์. NoSQL์ ์ด๊ธฐ ์ฒ ํ("์คํค๋ง๋ ์์ ๋ค!")์ด ์ค์ ์ด์์์ ํ๊ณ๊ฐ ์์๋ค๋ ๊ฑธ ์ธ์ ํ ๊ฑฐ์ฃ .
๊ทธ๋์ ๋๋๊ฐ MongoDB๋ Schema Validation์ผ๋ก ๊ฒ์ฆํ ์ ์๋ค๊ณ ํ์ ๊ฑด ๋ง์ง๋ง, ๊ทธ ๊ธฐ๋ฅ์ ์ฐ๋ ์๊ฐ RDBMS์ ์ฅ์ ์ ํ๋ด๋ด๊ณ ์๋ ๊ฒ์ด๊ฑฐ๋ ์. ์ฒ์๋ถํฐ RDBMS๋ฅผ ์ฐ๋ฉด ๊ทธ ๊ฒ์ฆ์ด ๊ทธ๋ฅ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ผ์์.
๋ค์ ๋์์์ NoSQL์ ์ฒ ํ์ด ์ ํํ ๋ญ๊น์?
๋๋๊ฐ NoSQL์ ๋น์ ํ ๋ฐ์ดํฐ์ฉ์ด๋ผ๋ ํ๋ ์์ ๊ฐ๋๊ธฐ์ ๊ทธ ์ฒ ํ์ด ๋ ๋๋ค ํ์ จ๋๋ฐ, ๊ทธ ๋ ๋์ ์ฒ ํ์ด ๊ตฌ์ฒด์ ์ผ๋ก ๋ญ๊น์?
์ ์๊ฐ์๋ NoSQL์ ๋ณธ์ง์ trade-off๋ CAP ์ ๋ฆฌ์์ ๋์จ๋ค๊ณ ์๊ฐํด์.
- ์ผ๊ด์ฑ(Consistency)์ ์๋ณดํ๊ณ ๊ฐ์ฉ์ฑ(Availability)๊ณผ ๋ถํ ๋ด์ฑ(Partition tolerance)์ ์ป๋๋ค
- ACID ๋์ BASE๋ฅผ ๋ฐ์๋ค์ธ๋ค
์ฅ๊ธฐ ๊ฒ์์์ ์ด trade-off๋ฅผ ๋ฐ์๋ค์๋์?
- ๊ฐ์ฉ์ฑ์ด ๊ทธ๋ ๊ฒ ์ค์ํ๊ฐ? (ํ ์ฌ๋์ด ํ๋ ๊ฒ์)
- ๋ถํ ๋ด์ฑ์ด ํ์ํ๊ฐ? (์ฌ๋ฌ ๋ ธ๋์ ๊ฑธ์น ๋ถ์ฐ ์ฒ๋ฆฌ?)
- eventual consistency๊ฐ ๊ฒ์์ ์ ํฉํ๊ฐ? (ํด์ด ์ด์ง ๋ฆ๊ฒ ๋ฐ์๋ผ๋ ๊ด์ฐฎ์๊ฐ?)
์๋๋ผ๋ฉด, NoSQL์ ๋ณธ์ง์ ๊ฐ์ ์ ํ์ฉํ์ง ์๊ณ ๋จ์ง Document ํํ๊ฐ ์ง๊ด์ ์ด๋ค๋ผ๋ ๋ถ์์ ์ด์ ๋ก ์ ํํ ๊ฑฐ์์. ๊ทธ๋ผ ๊ทธ๊ฑด NoSQL์ ์ฒ ํ์ ๋ฐ๋ฅธ๋ค๊ธฐ๋ณด๋ค๋ JSON ์ ์ฅ์๋ก ์ฐ๋ ๊ฒ์ ๊ฐ๊น์์.
์ ๋ ๋๋์ ๋์ ์ ์ ๊ณผ MongoDB๋ฅผ ๊น์ด ๊ณต๋ถํ ์ ์ ์ ๋ง ๋์ด ํ๊ฐํด์.
๋ค๋ง ๊ฐ ๋๊ตฌ๋ ์๊ธฐ๊ฐ ์ํ๋ ์์ญ์ด ์๊ณ , ๊ทธ ์์ญ์ ๋ง์ถฐ ์ธ ๋ ์ง์ง ๊ฐ์น๊ฐ ๋์จ๋ค๋ ๊ฒ ์ ์๊ฐ์ด์์. ๋๋๊ฐ MongoDB๋ฅผ ์ง์ ์จ๋ณด๊ณ ๊ทธ trade-off๋ฅผ ์ฒด๊ฐํ ๊ฒ ์์ฒด๊ฐ ๊ฐ์ฅ ํฐ ํ์ต์ด๊ณ , ๊ทธ ๊ฒฝํ์ด ๋์ค์ ์ด ํ๋ก์ ํธ์ ์ด๋ค DB๋ฅผ ์จ์ผ ํ ๊น? ๊ฒฐ์ ํ ๋ ์ง์ง ์์ฐ์ด ๋ ๊ฑฐ์์!
๋ค์ ํ๋ฒ, ์ฑ ๊น์ง ์ฐพ์๋ณด๋ฉด์ ๋ต๋ณํด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํด์! ์ด๋ฐ ๊น์ด ์๋ ํ ๋ก ์ด ์ง์ง ์ฑ์ฅ์ ๋ง๋ ๋ค๊ณ ์๊ฐํด์ ใ ใ
| Board board = boardDao.findBoardByGameId(gameId); | ||
| int turnCount = boardDao.findTurnCountByGameId(gameId); |
There was a problem hiding this comment.
๋ ๋ฉ์๋ ๋ชจ๋ _id๋ก ๊ฐ์ Document๋ฅผ ์กฐํํ๋๋ฐ, ๋คํธ์ํฌ ์์ฒญ์ด 2๋ฒ ๋๊ฐ๊ณ ์์ด์. ํ๋์ ๋ฉ์๋์์ Document๋ฅผ ํ ๋ฒ๋ง ์กฐํํด์ Board์ turnCount๋ฅผ ๊ฐ์ด ๋ฐํํ๋ฉด ์ด๋จ๊น์?
์ด๊ฑธ ํด๊ฒฐํ๋ ค๊ณ ํ๋ฉด Board์ turnCount๋ฅผ ๋ฌถ์ด์ ๋ฐํํ๋ ๊ฐ์ฒด๊ฐ ํ์ํด์ง๋๋ฐ์, ์ด๊ฒ ์ฌ์ค ๋๋๊ฐ PR ์ค๋ช ์์ ์ธ๊ธํ DTO์ ์์ฐ์ค๋ฌ์ด ๋์ ์์ ์ด๋ผ๊ณ ์๊ฐํด์.
There was a problem hiding this comment.
์ด๊ฑธ ํด๊ฒฐํ๋ ค๊ณ ํ๋ฉด Board์ turnCount๋ฅผ ๋ฌถ์ด์ ๋ฐํํ๋ ๊ฐ์ฒด๊ฐ ํ์ํด์ง๋๋ฐ์, ์ด๊ฒ ์ฌ์ค ๋๋๊ฐ PR ์ค๋ช ์์ ์ธ๊ธํ DTO์ ์์ฐ์ค๋ฌ์ด ๋์ ์์ ์ด๋ผ๊ณ ์๊ฐํด์.
์ด ๋ง์์ด ์ด๋ฒ ๋ฏธ์
์ ํตํ์ด ์ ๋ง ์ธ์๊น์ ๋ง ๊ฐ์ต๋๋ค. DTO๋ผ๋ ์๋ก์ด ๋๊ตฌ์ ๋์
์ ์ธ์ ํด์ผํ ์ง ๊ณ ๋ฏผํ๋ค๊ฐ DB๊ฐ ์ฐ๊ฒฐ๋๊ณ ํ๋์ Document์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก DTO๋ฅผ ๋์
ํ๋ฉด ๋คํธ์ํฌ ์์ฒญ๋ ์ค์ผ ์ ์๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋๋ ์์ฒญ์ด ์ค์ด๋ ๋งํผ ๋ฐ์ดํฐ ํธ์ถ์ ์ํ ์ฝ๋๊ฐ ์ค์ด๋ค์ด ๊ฐ๋
์ฑ์ด ํฅ์๋๋ ์์ฐ์ค๋ฌ์ด ์๋ก์ด ๋๊ตฌ์ ๋์
์ง์ ์ด๋ผ๋ ๋ฐ ๊ณต๊ฐํฉ๋๋ค.
|
์ตํฉ์ํํธ์จ์ดํ๋ถ๋ฅผ ์กธ์
ํ ์ ๊ณต์ ๋ง์ต๋๋ค! ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ redis ๋ฑ ๋ค๋ฅธ ๊ฒ๋ ๋ง์ง๋ง, ์ฒ์์ Redis ์ฌ์ฉ์ ๊ณ ๋ คํ์ต๋๋ค. ์ด์ ๋ ๋ ๋์ค๊ฐ ์ธ๋ฉ๋ชจ๋ฆฌ DB์ด๊ณ ๋ง๋น๋
ธ๊ธฐ ๊ฐ์ ๊ฒ์์ DB๋ก๋ ์ฌ์ฉ๋๋๋ฐ, ์ฅ๊ธฐ๊ฒ์์ ์ฌ์ฉํ์ง ๋ชปํ ๊น๋ผ๋ ์๊ฐ์ผ๋ก ๊ณ ๋ฏผ์ ์์ํ๋ ๊ฒ ๊ฐ์์. ๊ทธ ์ด์ ๋ก๋ MySQL ๊ฐ์ RDB๋ก ํ
์ด๋ธ ์ค๊ณ ์, Document ์์ ์์๋ ์ ์ฒด ๋ฌธ์๋ฅผ ๋ฎ์ด์ฐ๊ธฐํ๋ ๋ฐฉ์๋ง๊ณ ๋ถ๋ถ field๋ง ๊บผ๋ด updateํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ์ต๋๋ค. ์ด ๋ฐฉ์์ Document ํ๋ offset์ ํตํด ์ ์ฒด ๋ฌธ์๋ฅผ ๊ต์ฒดํ์ง ์๊ณ ํน์ ํ๋๋ง ์์ ํ ์ ์๋๋ก ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ผ๋ก ์คํํ ์ ์์์ต๋๋ค! RDB๋ ์ฅ๊ธฐํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ค๋ฉด Game ํ ์ด๋ธ๊ณผ Piece ํ ์ด๋ธ ๋ฑ์ ๋๋๊ณ ์ธ๋ํค๋ก ์ฐ๊ฒฐํ๊ณ ์กฐ์ธํด์ผ ํฉ๋๋ค. ๊ธฐ๋ฌผ ํ๋๋ฅผ ์์ง์ผ ๋๋ง๋ค Piece ๋ฑ์์ ํน์ ํ์ ์ฐพ์ ํ ์ ๋ฐ์ดํธ ํ๊ณ , ์กฐํ์์๋ ๋ ๋ค์ ์ฌ๋ฌ ํ์ Joinํด์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ACID ์์น์ ์ํ ์๊ฒฉํ ๊ฒ์ฆ ์ ์ฐจ๋ ๋ค์ด๊ณ ์ MongoDB๋ BASE ์์น์ ๋ฐ๋ผ RDB๋ณด๋ค ์ ์ฐํ ์์น์ ๋ฐ๋ฆ ๋๋ค. ์ฅ๊ธฐํ ์์ฒด๋ฅผ ํ๋์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ(์ฐ๊ด๋ ๊ฐ์ฒด ๋ฌถ์)์ผ๋ก ๋ณด๊ณ , ๊ฒ์ ํ๋ = ๋ฌธ์ ํ๋๋ผ๋ ์ง๊ด์ ์ธ ๊ตฌ์กฐ ๋๋ถ์ ์ฝ๋๊ฐ ๋จ์ํด์ง๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๋จ ํ ๋ฒ์ ๋์คํฌ I/O๋ก ํ ์ ์ฒด ์ํ๋ฅผ ๋ณต์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, NoSQL์ด ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํจ์จ์ฑ์ ์ด์ ์ด ํฌ๊ณ ์ฆ์ ์ ์ฅ์ด ํ์ํ ์ฅ๊ธฐ ๊ฒ์์์ ์๋๋ ๋น ๋ฅด๋ค๋ฉด ์ ํํ์ง ์์ ์ด์ ๊ฐ ์๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ฐธ๊ณ ์๋ฃ ๋ง๋น๋ ธ๊ธฐ ๋ชจ๋ฐ์ผ์ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ ์ ์ํด Amazon MemoryDB๋ฅผ ๋์ ํ์ต๋๋ค. |
โฆ7/java-janggi into leejaehyeok97-step2
her0807
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ๋๋
๋ฆฌ๋ทฐ์ด ์๋ฌ์ ๋๋ค! ๋ต๋ณ์ฃผ์ ๋ด์ฉ์ ๋ํด ์ถ๊ฐ ์๊ฒฌ ์ ์ด๋์์ด์.
์๊ตฌ์ฌํญ์ ์ถฉ์กฑ๋ ๊ฒ ๊ฐ์ ์ด๋ง ๋จธ์งํ๊ฒ ์ต๋๋ค ๊ณ ์ ๋ง์ผ์ จ์ด์:)
๊ทธ๋๋ ์ค์ค๋ก ๊ณ ๋ฏผํ๊ณ ํ๊ฐ์ง๋ผ๋ ์๋ฏธ ์๋ ๊ฒ์ ์ป์ด๊ฐ๊ณ ์ถ๋ค๋ ๋ง์์
์ด๋ฒ ๋ฏธ์ ์ ๋๋ถ๋ถ์ด ์ ํํ์ง ์์ ๊ฒ ๊ฐ์ MongoDB๋ผ๋ NoSQL์ ์ ํํ๊ณ ์ฝ์ ํ๋ก๊ทธ๋จ์ DB ์ฐ๊ฒฐ๊ณผ ๋ชฝ๊ณ ๋๋น์ ๊ตฌ์กฐ์ ๋ํด ์ฒ์ ์์๊ฐ๋ฉฐ ๋ง์ ๊ฒ์ ๋ฐฐ์ด๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ฒ ๋ฆฌ๋ทฐ๋ ์ ๋ถํ๋๋ฆฝ๋๋ค!
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
๊ณ ๋ฏผํ๋ ์ง์ .
๊ถ์ฑ ๊ตฌํ
๊ถ์ฑ ์์์์ ์ด๋์ ๋ต์ ๊ธฐ์กด MoveStrategy์ ์์ฑํ๋ ๊ฒ์ ๋ฉ์๋์ ์๋ฅผ ๋๋ ค์ ๊ฐ๋ ์ฑ์ ์ ํดํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ฐ๋ผ์ ๊ถ์ฑ ์์ ์ด๋์ ๋ต์ ์๋ก ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ ์ฅ์ ์ด ์๋ค๊ณ ์๊ฐ์ ํ๋ค๊ฐ,
ํ์ง๋ง, ์ด๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ค๋ getPath()๋ฅผ ๊ถ์ฑ ์์์๋ ๊ธฐ์กด ์ด๋ ๊ฒฝ๋ก๋ฅผ ํฌํจํ์ฌ ๊ถ์ฑ ์์ ์ด๋์์น๋ฅผ ๋ง๋ถ์ฌ ๋ฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์๊ธฐ์กด ์ ๋ต์ ๊ถ์ฑ ์กฐ๊ฑด์ ๋จ์ํ ์ถ๊ฐํด(๋ง๋ถ์ฌ) ์ฃผ๋ ๊ฒ์ผ๋ก ๋ก์ง์ ์์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ถ๋ฆฌ๋ฅผ ํ์ง ์์์ผ๋ ํ ํด๋์ค์ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์กฐ๊ธ ๋ณด๊ธฐ ์ด๋ ค์์ง๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๋๊ผ์ต๋๋ค.
์ด ๊ฒฐ์ ์ด ๋์์ง ์์ ๊ฒฐ์ ์ธ์ง ๋ฆฌ๋ทฐ ๋ถํ๋๋ฆฝ๋๋ค.
์์ด ์กํ๋ ๊ฒฝ์ฐ ๊ฒ์์์ ์ง๋ค.
๋ณด๋์์ ์์ด ์ญ์ ๋๋ ๊ฒฝ์ฐ ์ฆ์ ๊ฒ์์ ์ข ๋ฃํด์ผํฉ๋๋ค.
๋ณด๋์ move์์ ์ด๋ํ๋ฉฐ ๋์คํ ์์น์ ๊ธฐ๋ฌผ์ ์ ๊ฑฐํ๊ณ ์๋๋ฐ, ์ด๋ ๋ฉ์๋์ ๊ฒ์ ์ข ๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ฑ ์๊น์ง ๊ฐ๊ฒ ํ๋
๊ฒ์ ๊ณผ๋ํ ์ฑ ์์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
๋ฐ๋ผ์, JanggiGame ๊ฐ์ฒด๋ฅผ ๋์ ํ์ฌ ๊ฒ์ ํ๋ฆ์ ๊ด์ ํ๊ณ ๋ณด๋๊ฐ์ฒด๋ก ๋งคํด ์ฅ๊ตฐ์ ์กด์ฌ๋ฅผ ์ฒดํฌํ๊ฒ ํ๊ณ ๊ฒ์ ์ข ๋ฃ๋ฅผ ์ ์ฐํ๊ฒ
๊ด๋ฆฌํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
JanggiGame ๊ฐ์ฒด๋ฅผ ๋์ ํจ์ผ๋ก์จ Board ๊ฐ์ฒด๊ฐ ์ปจํธ๋กค๋ฌ์ ํ๋ฌ๊ฐ ๊ฒ์ ์ ๊ฑฐํ ์ ์์๊ณ ์ด๊ฒ์ ๋ถ๋ช ํ ๊ฐ์ฒด์งํฅ์ ๋ ธ๋ ฅ์ ์ํ์ด์์ต๋๋ค.
์ปจํธ๋กค๋ฌ๋ฅผ ์์ ํ๋ฉฐ์ ๋ ๊ถ๊ธ์ฆ
Controller์ ์์ฐจ๋ฆผ์ด ์ด๋ฆ๊ณผ ์์ผ๋ก ๋งค์นญ๋๋๋ฐ BiFunction์ ์ฐ๋ฉด Formation enumํด๋์ค์์ ํ๋ฒ์ ์ด๊ธฐํํ ์ ์์ ๊ฒ๋ง ๊ฐ์๋ฐ ์ด ๊ฒฝ์ฐ Formation์ด Board๊ฐ์ฒด๋ฅผ ์์กดํ๊ฒ ๋ฉ๋๋ค. Formation ์ฝ๋๋ ๋ค์ ์ง์ ๋ถํด์ง๋ ์ฝ๋๊ฐ ๋๋๋ฐ Controller์ ์ฝ๋๋ ์๋นํ ๊น๋ํด์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ์ค๊ณ๊ฐ ์ ์ ํ์ง ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค.
JanggiGame ๊ฐ์ฒด
์๋ก ์ฅ๊ธฐ๊ฒ์ ๊ฐ์ฒด๋ฅผ ๋์ ํ๋๋ฐ, ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ฐ๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ํด์ ์นด์ดํธํ๋ ๋ฐ์ดํฐ์ธ turnCount๋ ๊ฐ๋ณ์ธ๋ฐ, ์ด ๋ถ๋ถ์์๋ ์์ ํ ๋ถ๋ณ ๊ฐ์ฒด๋ ๋ด๋ถ์ ๋ถ๋ณ ๋ฐ์ดํฐ ํ๋๋ง ๋ฐ๋์ด๋ ๋ค์ ์๋ก ๋ง๋ค์ด์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํด์น ์ ์๋ค๋ ์๊ฐ์ด ๋ค์ด์ ๊ฐ๋ณ์ผ๋ก turnCount๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด ๋ถ๋ถ์ด ๊ด์ฐฎ์์ง ๋ฆฌ๋ทฐ ์์ฒญ๋๋ฆฝ๋๋ค.
DB ์ฐ๊ฒฐ์ ๋ฐ๋ฅธ DAO ๋์ ๊ณผ ๊ธฐ์กด MVC ํจํด์ ํ์ฅ ์ค๊ณ
DB๋ฅผ ๋์ ํ๋ฉด์ ๊ธฐ์กด MVC ๊ตฌ์กฐ์ DAO ๊ณ์ธต์ ์ถ๊ฐํ์ต๋๋ค.
BoardDao๋ฅผ Controller์ ์ฃผ์ ํ์ฌ, Controller๊ฐ ๊ฒ์ ํ๋ฆ(์ ๊ฒ์/์ด์ดํ๊ธฐ)์ ๋ฐ๋ผ DAO๋ฅผ ํตํด ๊ฒ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋๋ก ์ค๊ณํ์ต๋๋ค.
์ด ๊ณผ์ ์์ ๊ณ ๋ฏผํ๋ ์ ์ DAO๊ฐ ๋๋ฉ์ธ ๊ฐ์ฒด(Board)๋ฅผ ์ง์ ๋ฐํํ๋ ๊ฒ์ด ๊ณผ์ฐ ์ ์ ํ๊ฐ ์ ๋๋ค.
ํ์ฌ
findBoardByGameId()๋ Document(๋ชฝ๊ณ DB์ ๋ฌธ์)๋ฅผ Board๋ก ๋ฐํํ์ฌ DAO๊ฐ ๋๋ฉ์ธ ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ์์ ์์์ผ ํฉ๋๋ค.DTO๋ ์ข์ ์ ํ์ง๊ฐ ๋ ์ ์์ง๋ง, ํ์ฌ ๊ท๋ชจ์์๋ ์คํ๋ ค ๊ณผํ ์ถ์ํ๋ผ๊ณ ์๊ฐํด์(ํ์ฌ ์์ ๊ท๋ชจ๋ผ ๋ทฐ๋ ๋๋ฉ์ธ์ ์์กดํ๊ณ ์์)
DAO๊ฐ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ค๋ฃฐ ์ ์๊ฒ ์ ํํ์ต๋๋ค.(์ค์ ํ์)
์ฅ์ :
๋จ์ :